package com.huakai.springenv.perf;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DataSourceConfig {

    @Bean
    @Primary
    public DataSource routingDataSource(@Qualifier("primaryDataSource") DataSource primaryDataSource,
                                                       @Qualifier("shadowDataSource") DataSource shadowDataSource) {
        TrafficRoutingDataSource routingDataSource = new TrafficRoutingDataSource();

        // 配置数据源
        Map<Object, Object> dataSourceMap = new HashMap<>();
        dataSourceMap.put("primaryDataSource", primaryDataSource);  // 主库
        dataSourceMap.put("shadowDataSource", shadowDataSource);    // 影子库

        routingDataSource.setTargetDataSources(dataSourceMap);
        routingDataSource.setDefaultTargetDataSource(primaryDataSource);  // 默认走主库
        routingDataSource.afterPropertiesSet();

        return routingDataSource;
    }

    // 配置主数据源和影子数据源
    @Bean
    public DataSource primaryDataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/test");  // 主库的 JDBC URL
        hikariConfig.setUsername("root");  // 数据库用户名
        hikariConfig.setPassword("123456");  // 数据库密码
        hikariConfig.setMaximumPoolSize(10);  // 最大连接池数
        hikariConfig.setMinimumIdle(0);
        return new HikariDataSource(hikariConfig);
    }

    @Bean
    public DataSource shadowDataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/perf__test");  // 从库的 JDBC URL
        hikariConfig.setUsername("root");  // 数据库用户名
        hikariConfig.setPassword("123456");  // 数据库密码
        hikariConfig.setMaximumPoolSize(10);  // 最大连接池数
        hikariConfig.setMinimumIdle(0);
        return new HikariDataSource(hikariConfig);
    }
}
